package com.lzy.product.common.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 枚举工具类
 *
 * @author
 * @create 2017/5/24 11:54
 **/
public class EnumUtil {
    /**
     * 获取枚举
     *
     * @param clazz
     * @param code
     * @return
     */
    public static <T extends IEnum> T valueOf(Class<T> clazz, Integer code) {

        // 得到values
        T[] enums = values(clazz);

        if (enums == null || enums.length == 0) {
            return null;
        }

        for (T t : enums) {
            if (t.getCode() == code) {
                return t;
            }
        }
        return null;
    }

    /**
     * 获取枚举列表
     *
     * @param clazz
     * @return
     */
    public static <T extends IEnum> List<T> valueOfList(Class<T> clazz) {

        // 得到values
        T[] enums = values(clazz);

        if (enums == null || enums.length == 0) {
            return null;
        }
        List<T> sd = new ArrayList<T>();
        for (T t : enums) {
            sd.add(t);

        }
        return sd;
    }

    /**
     * 获取枚举集合
     *
     * @param clazz
     * @return
     */
    public static <T extends IEnum> T[] values(Class<T> clazz) {
        if (!clazz.isEnum()) {
            throw new IllegalArgumentException("Class[" + clazz + "]不是枚举类型");
        }
        // 得到values
        return clazz.getEnumConstants();
    }

    /**
     * 获取所有常量描述
     */
    public static <T extends IEnum> List<Map<String, Object>> getEnumList(Class<T> clazz) {
        // 得到values
        List<T> enums = valueOfList(clazz);

        if (enums == null || enums.size() == 0) {
            return null;
        }
        List<Map<String, Object>> list = new ArrayList<>();
        for (T t : enums) {
            Map<String, Object> map = new HashMap<>();
            map.put("code", t.getCode());
            map.put("desc", t.getDesc());
            list.add(map);
        }
        return list;
    }
}
